//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
namespace System.Activities.Presentation.Internal.PropertyEditing.State 
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;

    // <summary>
    // Simple wrapper around a dictionary of CategoryStates keyed by the category names.
    // </summary>
    internal class CategoryStateContainer : PersistedStateContainer 
    {

        // <summary>
        // Gets the CategoryState for the specified category.  If one does not exist
        // yet, it will be created automatically, guaranteeing a non-null return value.
        // </summary>
        // <param name="categoryName">Name of the requested category</param>
        // <returns>A non-null instance of CategoryState</returns>
        public CategoryState GetCategoryState(string categoryName) 
        {
            return (CategoryState)this.GetState(categoryName);
        }

        // <summary>
        // Creates a default state object based on the specified key
        // </summary>
        // <param name="key">Key of the state object</param>
        // <returns>Default state object</returns>
        protected override PersistedState CreateDefaultState(object key) 
        {
            return new CategoryState(key as string);
        }

        // <summary>
        // Deserializes the specified string value into a state object
        // </summary>
        // <param name="serializedValue">Serialized value of the state object</param>
        // <returns>Deserialized instance of the state object</returns>
        protected override PersistedState DeserializeState(string serializedValue) 
        {
            return CategoryState.Deserialize(serializedValue);
        }
    }
}
